fix(deep-crawl): ContextVar crash in streaming deep crawl (#1917)#1922
fix(deep-crawl): ContextVar crash in streaming deep crawl (#1917)#1922
Conversation
#1917) ContextVar.reset(token) requires the same Context that created the token. When Starlette's StreamingResponse consumes the async generator in a different Task, the Context changes and reset() raises ValueError. Replaced with set(False) which works across context boundaries. Safe because deep_crawl_active is never nested — the guard on line 21 prevents re-entry.
|
The |
|
Good question — the fix covers both paths:
Also, a small note: we use |
Summary
DeepCrawlDecoratorusedContextVar.reset(token)in the async generator'sfinallyblock. When Starlette'sStreamingResponseconsumes the generator in a different asyncio Task (differentContext),reset()raisesValueError: was created in a different Context.reset(token)withset(False)on both the streaming and batch paths. Safe becausedeep_crawl_activeis never nested — the guard on line 21 prevents re-entry.Test plan
/crawl/streamendpoint: 3/3 requests crash before fix, 0/3 aftertests/deep_crawling/test_deep_crawl_contextvar.py)